/*
 * ProgramA.cpp
 * * ProgramA 的具体实现。
 */

#include "ProgramA.h"

// 构造函数：初始化成员变量
ProgramA::ProgramA() {
    _lastPrintTime = 0;
    _counter = 0;
}

// 返回程序名称
const char* ProgramA::getName() {
    return "Mock Task A"; // 这个名字将显示在菜单中 (如果注册表使用它)
}

// 子程序的 setup
void ProgramA::sub_setup() {
    Serial.println("--- Mock Task A: Setup ---");
    // 初始化此任务所需的任何硬件...
    _counter = 0;
    _lastPrintTime = millis();
}

// 子程序的 loop (必须非阻塞！)
void ProgramA::sub_loop() {
    // 这是实现非阻塞循环的关键
    // 不要使用 delay()!
    if (millis() - _lastPrintTime > 3000) { // 每 3 秒执行一次
        Serial.print("Mock Task A: Loop is running. Count: ");
        Serial.println(_counter);
        _counter++;
        _lastPrintTime = millis(); // 重置计时器
    }
    
    // 在这里执行其他快速的、非阻塞的任务...
}

// 子程序的 cleanup
void ProgramA::sub_cleanup() {
    Serial.println("--- Mock Task A: Cleanup ---");
    // 在这里释放资源，例如 detachInterrupt()
}